const validate = require('../middleware/validator')
const {
    body,
    param
} = require('express-validator')
const response = require('../utils/response')
const mongoose = require('mongoose')
const Task = require('../models/task')

// 院长分解任务
exports.createTask = validate([
    body('userId')
    .notEmpty().withMessage('用户id不能为空~~'),
    body('parentId')
    .notEmpty().withMessage('父级任务Id不能为空'),
    body('taskname')
    .notEmpty().withMessage('任务名称不能为空'),
    body('creator')
    .notEmpty().withMessage('发起人不能为空'),
    body('worker')
    .notEmpty().withMessage('负责人不能为空'),
    body('describe')
    .notEmpty().withMessage('任务描述不能为空'),
    body('endtime')
    .notEmpty().withMessage('结束时间不能为空'),
])


// 院长获取任务
exports.getTask = validate([
    param('taskId').custom(async (value) => {
        if (!mongoose.isValidObjectId(value)) {
            return Promise.reject('任务ID类型错误')
        }
    })
])

// 院长更新任务
exports.deanUpdataTask = [
    validate([
        param('taskId').custom(async (value) => {
            if (!mongoose.isValidObjectId(value)) {
                return Promise.reject('任务ID类型错误')
            }
        }),
        body('userId')
        .notEmpty().withMessage('用户id不能为空~~'),
    ]),

    // async (req, res, next) => {
    //     if (req.user._id.toString() != req.task.creator.toString()) {
    //         return response(res, 403, '没有权限更改任务', )
    //     }
    //     next()
    // }
]

// 院长删除任务
exports.deleteTask = [
    validate([
        param('taskId').custom(async (value) => {
            if (!mongoose.isValidObjectId(value)) {
                return Promise.reject('任务ID类型错误')
            }
        }),
        body('userId')
        .notEmpty().withMessage('用户id不能为空~~'),
    ]),
]

// 专头分解任务
exports.majorSummitTask = validate([
    body('userId')
    .notEmpty().withMessage('用户id不能为空~~'),
    body('parentId')
    .notEmpty().withMessage('父级任务Id不能为空'),
    body('taskname')
    .notEmpty().withMessage('任务名称不能为空'),
    body('creator')
    .notEmpty().withMessage('发起人不能为空'),
    body('worker')
    .notEmpty().withMessage('负责人不能为空'),
    body('describe')
    .notEmpty().withMessage('任务描述不能为空'),
    body('endtime')
    .notEmpty().withMessage('结束时间不能为空'),
])

// 专头提交任务
exports.majorReferTask = [
    validate([
        param('taskId').custom(async (value) => {
            if (!mongoose.isValidObjectId(value)) {
                return Promise.reject('任务ID类型错误')
            }
        }),
        body('userId')
        .notEmpty().withMessage('用户id不能为空~~'),
        body('process')
        .notEmpty().withMessage('进度不能为空~~'),
        body('describe')
        .notEmpty().withMessage('提交描述不能为空~~'),
    ]),
    async (req, res, next) => {
        const taskId = req.params.taskId
        const task = await Task.findById(taskId)
        if (!task) {
            return response(res, 404, '找不到该任务', task)
        }
        if (task.process === 100 || task.status === 3) return response(res, 401, '你的任务已完成~~', null)
        //进度大于0，任务状态：进行中
        // if (req.body.process > 0 && task.status === 0) {
        //     await Task.findByIdAndUpdate(taskId,{status:1})
        // }
        req.task = task
        next()
    },
]

// 专头更新任务
exports.updataTask = [
    validate([
        param('taskId').custom(async (value) => {
            if (!mongoose.isValidObjectId(value)) {
                return Promise.reject('任务ID类型错误')
            }
        }),
        body('userId')
        .notEmpty().withMessage('用户id不能为空~~'),
    ]),
    async (req, res, next) => {
        const taskId = req.params.taskId
        const task = await Task.findById(taskId).lean()
        req.task = task
        if (!task) {
            return response(res, 404, '找不到该任务', task)
        }
        next()
    },

    // async (req, res, next) => {
    //     if (req.user._id.toString() != req.task.creator.toString()) {
    //         return response(res, 403, '没有权限更改任务', )
    //     }
    //     next()
    // }
]

// 专头删除任务
exports.majorDeleteTask = [
    validate([
        param('taskId').custom(async (value) => {
            if (!mongoose.isValidObjectId(value)) {
                return Promise.reject('任务ID类型错误')
            }
        }),
        body('userId')
        .notEmpty().withMessage('用户id不能为空'),
    ]),
    async (req, res, next) => {
        const taskId = req.params.taskId
        const task = await Task.findById(taskId).lean()
        // req.task = task
        if (!task) {
            return response(res, 404, '找不到该任务', null)
        }
        next()
    },
]


// 老师提交任务
exports.teacherSummitTask = validate([
    body('taskname')
    .notEmpty().withMessage('任务名称不能为空'),
    body('parentClass')
    .notEmpty().withMessage('发起人不能为空'),
    body('worker')
    .notEmpty().withMessage('负责人不能为空'),
    body('describe')
    .notEmpty().withMessage('任务描述不能为空'),
    body('endtime')
    .notEmpty().withMessage('结束时间不能为空'),
])



// 日志
// exports.journal = [
//     async (req, res, next) => {
//         const taskId = req.params.taskId
//         const task = await Task.find(taskId)
//         const bodyTask = req.body.task
//         task.taskname = bodyTask.taskname || task.taskname
//         task.parentId = bodyTask.parentId || task.parentId
//         task.creator = bodyTask.creator || task.creator
//         task.worker = bodyTask.worker || task.worker
//         task.status = bodyTask.status || task.status
//         task.process = bodyTask.process || task.process
//         task.describe = bodyTask.describe || task.describe
//         task.fileAddress = bodyTask.fileAddress || task.fileAddress
//         task.endtime = bodyTask.endtime || task.endtime
//         task.grade = bodyTask.grade || task.grade
//         next()
//     },
// ]